System এবং Runtime ক্লাস দুটি অত্যন্ত গুরুত্বপূর্ণ ক্লাস যা Java প্রোগ্রামিংয়ে performance monitoring এর জন্য ব্যবহৃত হতে পারে। System ক্লাস সিস্টেম-সম্পর্কিত তথ্য এবং Runtime ক্লাস JVM-এ রানটাইম তথ্য সম্পর্কিত ডেটা প্রদান করে, যা Java application performance monitoring এর জন্য উপকারী হতে পারে।
1. System ক্লাস:
System ক্লাস হল java.lang প্যাকেজের একটি স্ট্যাটিক ক্লাস, যা সিস্টেম সম্পর্কিত বিভিন্ন তথ্য এবং অপারেশন সরবরাহ করে। এটি input/output (I/O) স্ট্রিম, system properties, current time, এবং garbage collection সম্পর্কিত বিভিন্ন কার্যাবলী পরিচালনা করতে ব্যবহৃত হয়।
Performance Monitoring using System class:
System.currentTimeMillis(): এটি সিস্টেমের current time মাপতে ব্যবহৃত হয়। আপনি এটি ব্যবহার করে কোডের কার্যকারিতা মাপতে পারেন, যেমন একটি ফাংশন বা অপারেশনের execution time।System.nanoTime(): এটি nanoseconds এ সিস্টেমের সময় প্রদান করে এবং খুব সঠিকভাবে সময় পরিমাপ করতে ব্যবহৃত হয়। এটি performance testing এবং benchmarking এর জন্য উপযুক্ত।
Usage Example - Measuring Code Execution Time:
public class SystemPerformanceMonitoring {
public static void main(String[] args) {
long startTime = System.nanoTime(); // Start time in nanoseconds
// Code block or function whose performance needs to be measured
performTask();
long endTime = System.nanoTime(); // End time in nanoseconds
long duration = endTime - startTime; // Duration in nanoseconds
System.out.println("Task completed in: " + duration + " nanoseconds");
}
public static void performTask() {
// Simulating some task by making the thread sleep for 2 seconds
try {
Thread.sleep(2000); // Sleep for 2 seconds
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Explanation:
System.nanoTime()ব্যবহার করে কোড ব্লকটির execution time পরিমাপ করা হয়েছে।performTask()মেথডটি 2 সেকেন্ডের জন্য স্লিপ করে, এবং সেই সময়ের জন্য পারফরম্যান্স মনিটরিং করা হয়েছে।
Output Example:
Task completed in: 2002537898 nanoseconds
2. Runtime ক্লাস:
Runtime ক্লাস একটি singleton class যা Java Virtual Machine (JVM) এর রানটাইম পরিবেশের সাথে সম্পর্কিত বিভিন্ন কার্যাবলী পরিচালনা করে। এটি ব্যবহৃত হয়ে থাকে garbage collection, memory usage, available processors ইত্যাদি সম্পর্কে তথ্য পাওয়ার জন্য।
Performance Monitoring using Runtime class:
Runtime.getRuntime(): এটিRuntimeঅবজেক্ট রিটার্ন করে, যার মাধ্যমে আপনি JVM এর রানটাইম পরিবেশের তথ্য অ্যাক্সেস করতে পারেন।Runtime.totalMemory(): এটি JVM এর মোট memory পরিমাণ প্রদান করে (বাইটে)।Runtime.freeMemory(): এটি JVM-এ ব্যবহৃত মুক্ত মেমরি পরিমাণ প্রদান করে।Runtime.maxMemory(): এটি JVM-এ সর্বাধিক মেমরি পরিমাণ রিটার্ন করে যা JVM দ্বারা ব্যবহার করা যেতে পারে।
Usage Example - Memory Usage Monitoring:
public class RuntimePerformanceMonitoring {
public static void main(String[] args) {
Runtime runtime = Runtime.getRuntime();
// Total memory allocated to JVM
long totalMemory = runtime.totalMemory();
// Free memory available in JVM
long freeMemory = runtime.freeMemory();
// Maximum memory JVM can use
long maxMemory = runtime.maxMemory();
// Output memory details
System.out.println("Total Memory: " + totalMemory / (1024 * 1024) + " MB");
System.out.println("Free Memory: " + freeMemory / (1024 * 1024) + " MB");
System.out.println("Max Memory: " + maxMemory / (1024 * 1024) + " MB");
// Simulating memory usage by creating large objects
allocateMemory();
// Checking memory after allocating objects
long usedMemory = totalMemory - freeMemory;
System.out.println("Used Memory After Allocation: " + usedMemory / (1024 * 1024) + " MB");
}
public static void allocateMemory() {
// Simulating memory allocation by creating large arrays
int[] largeArray = new int[1000000];
}
}
Explanation:
Runtime.getRuntime()ব্যবহার করে JVM এর রানটাইম পরিবেশের সাথে যোগাযোগ করা হয়েছে।totalMemory(),freeMemory(), এবংmaxMemory()মেথড ব্যবহার করে JVM এর মেমরি সম্পর্কিত তথ্য সংগ্রহ করা হয়েছে।allocateMemory()মেথডে বড় অ্যারে তৈরি করে মেমরি ব্যবহারের পরিমাণ দেখানো হয়েছে।
Output Example:
Total Memory: 256 MB
Free Memory: 245 MB
Max Memory: 1024 MB
Used Memory After Allocation: 245 MB
3. Combining System and Runtime for Performance Monitoring
আপনি System.nanoTime() এবং Runtime ক্লাসের মেমরি মনিটরিং টুলগুলোকে একসাথে ব্যবহার করে একটি পারফরম্যান্স ডায়াগনস্টিক তৈরি করতে পারেন যা সময় এবং মেমরি ব্যবহার উভয়ই মাপবে।
Comprehensive Performance Monitoring Example:
public class ComprehensivePerformanceMonitor {
public static void main(String[] args) {
// Monitor start time
long startTime = System.nanoTime();
// Get the runtime object
Runtime runtime = Runtime.getRuntime();
long initialMemory = runtime.freeMemory();
// Perform the task
performTask();
// Monitor end time and memory usage
long endTime = System.nanoTime();
long finalMemory = runtime.freeMemory();
// Calculating time taken
long duration = endTime - startTime;
long memoryUsed = initialMemory - finalMemory;
// Output the results
System.out.println("Task Execution Time: " + duration + " nanoseconds");
System.out.println("Memory Used: " + memoryUsed / (1024 * 1024) + " MB");
}
public static void performTask() {
// Simulating a task with memory allocation
int[] array = new int[1000000]; // Allocating memory for the task
for (int i = 0; i < array.length; i++) {
array[i] = i;
}
}
}
Explanation:
System.nanoTime()দিয়ে কোডের কার্যকর সময় পরিমাপ করা হচ্ছে।Runtime.freeMemory()দিয়ে মেমরি ব্যবহার পরিমাপ করা হচ্ছে, অর্থাৎ task শুরুর আগে এবং পরে মেমরি ব্যবহারের মধ্যে পার্থক্য বের করা হচ্ছে।
Java তে System এবং Runtime ক্লাস ব্যবহার করে আপনি আপনার প্রোগ্রামের performance monitoring করতে পারেন। System.nanoTime() ব্যবহার করে আপনি কার্যকর সময় পরিমাপ করতে পারেন, আর Runtime ক্লাসের মেথড ব্যবহার করে আপনি JVM এর মেমরি ব্যবহারের তথ্য পেতে পারেন। এই পদ্ধতিগুলোর মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনগুলির পারফরম্যান্স পরিমাপ এবং অপটিমাইজ করতে পারেন।
Read more